知识点名称:Android传感器概述
编号: K12-1
前驱知识点编号:K1-1,K3-1,K3-2
作者:
讲义内容:
手机中通常内置了多种传感器,用于检测运动、方向和各种不同的环境状态的信息。这些传感器能够提供高精度、实时的原始数据。开发者能够利用这些传感器提供的信息来获得设备的运动、位置以及环境信息。例如,一个游戏可能需要监控设备的重力传感器来推测出用户需要做出的手势和动作,比如倾斜、摇动、旋转、摇摆等等。一个天气应用可能需要监控设备的温度和湿度传感器来计算露点,或者一个旅行应用可能需要使用地理位置传感器和加速度传感器来报告指南针方位。
Android平台支持三大类传感器:
运动类传感器:
这类传感器主要监测设备的在三个轴上的加速度和旋转加速度。这个类型的传感器包括了加速度传感器、重力传感器、陀螺仪和旋转向量传感器。
环境传感器
这类传感器用于监测不同的环境参数,例如附近的气温、气压、光照和湿度。这个类型的传感器包括气压计、光度计、气温计。
位置传感器
这类传感器用于监测设备的位置。这个类型的传感器包括方向传感器和地磁传感器。
开发者通过使用Android传感器接口框架来访问设备上的传感器并获取原始数据。
通常使用传感器接口的步骤如下:
检测设备上的传感器是否存在或可用
检测特定传感器的性能,例如最大范围、厂商、能耗和精度。
获取传感器的原始数据,并定义你或者传感器数据的最小频率。
注册和注销传感器事件的监听器来监听传感器的变化。
Android传感器包括基于硬件的传感器和基于软件的传感器,基于硬件的传感器是嵌入设备的物理部件,它们会直接获取原始数据,例如加速度、地磁强度、角度变化。基于软件的传感器没有对应的物理设备,它们的数据是基于一个或多个基于物理的传感器的数据合成而来的,它们也被称为虚拟传感器或者合成传感器。线性加速度传感器和重力传感器都属于基于软件的传感器。
表格12.1列出了Android平台支持的所有传感器。极少有Android设备能够支持每一种类型的传感器。例如,几乎所有的设备都支持加速度传感器和地磁传感器,但是很少有设备支持气压计和温度计。同时,给定一个传感器类型,一个设备可以有多于一个传感器。例如,一个设备可以有两个重力传感器,每个有不同的检测范围。
表12.1 Android平台支持的传感器类型
传感器名称 | 变量名 | 类型 | 描述 | 用途 |
---|---|---|---|---|
加速度传感器 | TYPE_ACCELEROMETER | 硬件 | 监测设备在三个轴(x,y,z轴)上的加速度,包括了重力加速度在内,单位是$$m/s^2$$ | 运动监测(倾斜、摇动等等) |
温度计 | TYPE_AMBIENT_TEMPERATURE | 硬件 | 检测设备周围的温度,单位是摄氏度 | 检测气温 |
重力传感器 | TYPE_GRAVITY | 硬件 | 检测设备在三个轴(x,y,z轴)上的重力加速度,单位是$$m/s^2$$ | 运动监测(倾斜,摇动等等 |
陀螺仪 | TYPE_GYROSCOPE | 硬件 | 检测设备在三个轴(x,y,z轴)上的角速度,单位是rad/s | 监测旋转 |
光度计 | TYPE_LIGHT | 硬件 | 检测设备周围的光照强度,单位是lx. | 监测光照强度 |
线性加速度传感器 | TYPE_LINEAR_ACCELERATION | 硬件 | 检测设备在三个轴(x,y,z轴)上的加速度,不包括重力加速度,单位是单位是$$m/s^2$$ | 监测每个轴上的加速度 |
地磁传感器 | TYPE_MAGNETIC_FIELD | 硬件 | 检测设备在三个轴(x,y,z轴)上的地磁强度,单位是 μT. | 创建指南针 |
方向传感器 | TYPE_ORIENTATION | 硬件 | 获取设备在三个轴(x,y,z轴)的倾斜角度和旋转角度。注意:从API LEVEL 20开始,这个API已经被废弃了 | 获取设备的位置 |
气压计 | TYPE_PRESSURE | 硬件 | 获取设备附近的气压,单位是hPa 或者 mbar. | 监测气压 |
接近传感器 | TYPE_PROXIMITY | 硬件 | 获取一个物体与设备屏幕的距离,单位是厘米。这个传感器通常用于判断手持设备是否被拿起并靠近人的耳朵。 | 在通话时判断人的耳朵靠近手机的距离 |
湿度传感器 | TYPE_RELATIVE_HUMIDITY | 硬件 | 获取设备周围的空气湿度,但是是百分比。 | 监测湿度 |
旋转向量传感器 | TYPE_ROTATION_VECTOR | 硬件 | 获取设备的旋转向量并检测设备的方向 | 运动监测和方向监测 |
温度计 | TYPE_TEMPERATURE | 硬件 | 获取设备周围的温度,注意:从API LEVEL 14开始,这个API已经废弃了,请使用新的TYPE_AMBIENT_TEMPERATURE | 监测温度 |